package com.whz.workmanageol.utils;

import com.whz.workmanageol.entity.Student;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Component;

import java.io.*;
import java.util.*;

/**
 * 便于管理员使用Excel导入 教师 学生 班级 课程 学生-班级 课程-班级 教师-班级 班级-课程
 */
@Component
public class ExcelUtils {
    /**
     * 读取Excel文件中的学生信息
     * @param filepath
     * @return
     */
    public List<Student> readStudent(String filepath){
        if(!filepath.endsWith("studentinfo.xlsx")) return null;
        List<Student> studentList = new ArrayList<>();
        List<Map<String, String>> mapList = readExcel(filepath);
        for(Map<String, String> map : mapList){
            Student student = new Student();
            for (Map.Entry<String, String> entry : map.entrySet()) {
                if("学号".equals(entry.getKey())){
                    student.setStudentid(entry.getValue());
                }
                if("密码".equals(entry.getKey())){
                    student.setPassword(entry.getValue());
                }
                if("用户名".equals(entry.getKey())){
                    student.setUsername(entry.getValue());
                }
                if("电子邮箱".equals(entry.getKey())){
                    student.setEmail(entry.getValue());
                }
                if("电话".equals(entry.getKey())){
                    student.setTel(entry.getValue());
                }
            }
            ;
            studentList.add(student);
        }
        return studentList;
    }

    /**
     * 读取后缀为.xlsx的Excel文件
     * @param filepath Excel文件的存储路径和文件名称
     * @return
     */
    private List<Map<String, String>> readExcel(String filepath){
        List<Map<String, String>> mapList = new ArrayList<>();
        File file = new File(filepath);
        // 判断文件是否存在
        if(file.isFile() && file.exists()){
            if(filepath.endsWith(".xlsx")){
                Workbook workbook;
                // 文件为Excel文件
                try {
                    FileInputStream inputStream = new FileInputStream(file);
                    workbook = new XSSFWorkbook(inputStream);
                    // 开始解析Excel文件
                    Sheet sheet = workbook.getSheetAt(0);
                    // 第一行是列名 从第二行遍历
                    int firstRowNum = sheet.getFirstRowNum() + 1;
                    int lastRowNum = sheet.getLastRowNum();
                    // 遍历行
                    for(int rIndex = firstRowNum; rIndex <= lastRowNum; rIndex++){
                        Map<String, String> map = new HashMap<>();
                        Row row = sheet.getRow(rIndex);
                        if(row != null){
                            int firstCellNum = row.getFirstCellNum();
                            int lastCellNum = row.getLastCellNum();
                            for(int cIndex = firstCellNum; cIndex < lastCellNum; cIndex++){
                                row.getCell(cIndex).setCellType(CellType.STRING);
                                // 获取单元格的值
                                String value = row.getCell(cIndex).getStringCellValue();
                                // 获取此单元格对应第一行的值
                                String key = sheet.getRow(0).getCell(cIndex).getStringCellValue();
                                map.put(key, value);
                            }
                        }
                        mapList.add(map);
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return mapList;
    }






}
